﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Capa_Datos;
using System.Data.SqlClient;

namespace Capa_Negocios
{
    public class Usuario
    {
        static DataClasses1DataContext Adaptador = new DataClasses1DataContext();
                
        #region constructor        
        public Usuario()
        { }
        #endregion
                
        #region metodos
        static public string insertar(string username, string nombre, int telefono, string puesto, string contraseña, bool admin)
        {
            try
            {
                Adaptador.InsertarUsuario(username, nombre, telefono, puesto, true, contraseña, admin);
                return "Se insertó correctamente";
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                return "No pudo insertarse, se generó el siguiente error: "+ex.Message;
            }
        }

        static public string editar(int id, string username, string nombre, int telefono, string puesto)
        {
            try
            {
                Adaptador.editarUsuario2((byte)id, username, nombre, telefono, puesto);
                return "Se editó correctamente";
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                return "No pudo editarse, se generó el siguiente error: "+ex.Message;
            }
        }

        static public string editarPass(int id, string username, string nombre, int telefono, string puesto, string vieja, string nueva)
        {
            try
            {
                Adaptador.editarUsuario(Convert.ToByte(id), username, nombre, Convert.ToInt16(telefono), puesto, vieja, nueva);
                return "Se editó correctamente";
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                return "No pudo editarse, se generó el siguiente error: " + ex.Message;
            }
        }
                        
        static public List<object> listarusuariosNombre(string texto)
        {
            var listar = (from al in Adaptador.ListarUsuarios() where al.NOMBRE.StartsWith(texto) 
                                   select new { I=al.IDUSUARIO, N= al.NOMBRE, U=al.USERNAME,P= al.PUESTO, T= al.TELEFONO }).ToList<object>();
            return listar;
        }

        static public List<object> listarusuariosUser(string texto)
        {
            var listar = (from al in Adaptador.ListarUsuarios()
                          where al.USERNAME.StartsWith(texto)
                          select new { I = al.IDUSUARIO, N = al.NOMBRE, U = al.USERNAME, P = al.PUESTO, T = al.TELEFONO }).ToList<object>();
            return listar;
        }

        static public List<object> listarTodos()
        {
            var listar = (from al in Adaptador.ListarUsuarios()
                          select new { I = al.IDUSUARIO, N = al.NOMBRE, U = al.USERNAME, P = al.PUESTO, T = al.TELEFONO }).ToList<object>();
            return listar;
        }

        static public bool verificarUsuario(string usuario)
        {
            List<object> lista = listarTodos();
            string[] temp = new string[5];
            bool existe = false;
            for (int i = 0; i < lista.Count(); i++)
            {
                temp = lista.ElementAt(i).ToString().Split(',');
                if (temp[2].Equals(usuario))
                    existe = true;
            }
            return existe;
        }

        static public string cargos(int idUser, List<string> carreras)
        {
            try
            {
                Adaptador.deshabilitarCargosUsuario(Convert.ToByte(idUser));
                for (int i = 0; i < carreras.Count; i++)
                    Adaptador.habilitarCargosUsuario(Convert.ToInt16(idUser), carreras.ElementAt(i).ToString());
                return "Cargos editados exitosamente";
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                return "Se generó el siguiente error: " + ex.Message;
            }
        }

        static public void insertarCargo(int idUser, string carrera)
        {
            Adaptador.InsertarCargo((byte)idUser, carrera);
        }

        static public List<object> datos(int idUser)
        {
            var listar = (from al in Adaptador.ListarDatos((byte)idUser)
                          select new {N = al.NOMBRE, U = al.USERNAME, P = al.PUESTO, T = al.TELEFONO, C= al.NOMBRE_CARRERA, H=al.HABILITADO}).ToList<object>();
            return listar;
        }

        static public byte ultimoUser()
        {
            return (byte)Adaptador.ultimoUsuario();
        }
        #endregion
    }
}